package com.cw.jeeyt.dao.intf.security;

import java.util.List;

import com.cw.jeeyt.dao.model.security.SecurityResourceDo;
import com.cw.lang.mybatis.dto.PageInfo;

/**
 * 资源信息 dao数据库操作接口
 *
 * @author chenw
 * @version 1.0.0
 */
public interface SecurityResourceDao {

    /**
     * 删除资源信息
     *
     * @param resource
     */
    void delete(SecurityResourceDo resource);

    /**
     * 修改资源信息
     *
     * @param resource
     */
    void update(SecurityResourceDo resource);

    /**
     * 根据主键查询资源信息
     *
     * @param id 主键id
     * @return 资源信息
     */
    SecurityResourceDo getById(Long id);

    /**
     * 新增资源信息
     *
     * @param resource
     * @return 整数
     */
    Integer insert(SecurityResourceDo resource);

    /**
     * 查询所有资源信息
     *
     * @return 资源信息集合
     */
    List<SecurityResourceDo> queryResourceList();

    /**
     * 分页查询资源信息
     *
     * @param resource 查询条件
     * @param startNum 开始条数
     * @param pageSize 每页长度
     * @return 资源信息集合
     */
    PageInfo<SecurityResourceDo> queryByPage(SecurityResourceDo resource, Integer startNum, Integer pageSize);

    /**
     * 根据用户名称查询用户资源
     *
     * @param userName
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourceByUserName(String userName);

    /**
     * 根据角色id查询资源信息
     *
     * @param roleId
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourceByRoleId(Long roleId);

    /**
     * 加载根节点资源信息
     *
     * @return
     * @throws Exception
     */
    SecurityResourceDo queryRootSecurityResource();

    /**
     * 加载父节点下的所有资源信息
     *
     * @param resId
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> querySecurityResourceListByParentId(Long resId);

    /**
     * 根据用户角色加载资源信息
     *
     * @param roles
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourcesByUserRoles(String[] roles);

    /**
     * 根据用户ID查询用户权限信息
     *
     * @param userId
     * @return
     * @throws Exception
     */
    List<SecurityResourceDo> getResourcesByUserId(Long userId);

    /**
     * 更新父节点id
     *
     * @param id
     * @param parentId
     * @throws Exception
     */
    void updateResourceParentId(Long id, Long parentId);

    /**
     * 更新资源名称
     *
     * @param id
     * @param resName
     * @throws Exception
     */
    void updateResourceName(Long id, String resName);

    PageInfo<SecurityResourceDo> querySelectSecurityResource(SecurityResourceDo resource, Integer startNum,
        Integer pageSize);

    /**
     * 删除父节点下所有的资源
     *
     * @param parentId
     */
    void deleteByParentId(Long parentId);

    /**
     * 查询父id下的所有按钮资源
     *
     * @param parentId
     * @return
     */
    List<SecurityResourceDo> queryBtnListByParentId(Long parentId);

    /**
     * 根据资源名称及父id查询资源信息
     *
     * @param resName
     * @param parentId
     * @return
     */
    SecurityResourceDo getResByResNameAndParentId(String resName, Long parentId);

    /**
     * 根据父id及资源名称更新按钮资源url
     *
     * @param btnRes
     */
    void updateResUrlByResTitleAndParentId(SecurityResourceDo btnRes);

    /**
     * 批量新增资源信息
     *
     * @param srList
     */
    void insertBat(List<SecurityResourceDo> srList);

    /**
     * 判断资源是否需要权限访问
     *
     * @param url
     * @return
     */
    Integer checkResourceNeedAuth(String url);

    /**
     * 更新按钮集合
     *
     * @param id
     * @param btnList
     */
    void updateBtnList(Long id, String btnList);
}
